/* 00-thread.c

   Create and run a thread.

   pthread.h should be first otherwise compile with -D_THREAD_SAFE 
*/
#include <pthread.h>
#include <stdlib.h>
#include <stdio.h>

#define NUM_THREADS     10

void *PrintHello(void *threadid) {
   long tid;
   long i;

   tid = (long)threadid;
   /* */ 
      printf("Starting thread #%ld\n", tid);
      for (i=0 ; i < 10000000 ; i++); 
   /* */
   printf("Terminating thread #%ld\n", tid);
   pthread_exit(NULL);
}

/* Note: pthread_t is typedef unsigned long int */

int main (int argc, char *argv[]) {
   pthread_t threads[NUM_THREADS];
   int rc;
   long t;

   for (t=0; t < NUM_THREADS; t++) {
      printf("In main: creating thread %ld\n", t);
      rc = pthread_create(&threads[t], NULL, PrintHello, (void*)t);
      if (rc) {
         printf("ERROR; return code from pthread_create() is %d\n", rc);
         exit(-1);
      }
   }

   /* Last thing that main() should do */
   pthread_exit(NULL);
   return 0;
}
